package com.cn.wanxi.IO;

import com.cn.wanxi.dto.CompanyDto;
import com.cn.wanxi.model.CompanyModel;
import com.cn.wanxi.util.WriteNote;

import java.io.*;

/**
 * 通过IO流得到公司信息
 * 这里主要是公司信息的IO流
 * 要实现IO流得到数据的步骤：
 * 1.将数据存入IO流记事本
 * 2.将记事本里面的数据读取出来，返回的是一个字符串
 * 3.将字符串进行封装成CompanyModel对象
 * 这里我们将分为三个方法去执行？面向对象：一个方法里面只做一件事情
 */
public class CompanyIO {
    private String filePath = "E:\\wanxi\\step-three\\company.txt";//定义一个存记事本的路径

    /**
     * 引入构造方法,构造方法：在加载当前类的时候执行
     * 构造方法：名字和类名一样，有返回值（默认不谢）返回值就是类本身
     * 当一个类里面没有写无参数的构造方法，默认就有一个无参数的构造函数
     * 写入记事本
     */
    public CompanyIO() {
        writeCompanyModel();
    }

    private void writeCompanyModel() {
        //这里去执行写入记事本
        //创建文件对象 ,这里是带参数的构造方法，
        // 只要一个类里面写了带参数的构造方法，那么没有参数的构造方法无效，默认的构造方法就没有了
        File file = new File(filePath);//给记事本提供一个文件路径
        //我们现在是从内存里面写入记事本，叫做输出
        try {
            OutputStream outputStream = new FileOutputStream(file);//创建输出流
            //        OutputStream提供一个输出接口，是一个超类，有说有输出流的共同属性和方法
//        abstract  就是抽象的意思
//        FileOutputStream干事情的，实现接口，子类
//        提现Java的三大特性  多态     继承，封装，多态（抽象）


//        throws FileNotFoundException异常：一般情况下我们不把异常抛出到方法上，
//        而是直接解决异常，用try catch，哪里有异常，就在哪里处理。
            CompanyModel companyModel = new CompanyModel();
            outputStream.write(companyModel.getAddress().getBytes());
            outputStream.write("@@".getBytes());
            outputStream.write(companyModel.getPhone().getBytes());//写入电话号码
            String logo = companyModel.getLogo();//取得公司信息的logo
            outputStream.write("@@".getBytes());
            outputStream.write(logo.getBytes());
            outputStream.write("@@".getBytes());

            outputStream.write(companyModel.getAd().getBytes());
            outputStream.write("@@".getBytes());
            outputStream.write(companyModel.getNet().getBytes());
            outputStream.write("@@".getBytes());
            outputStream.write(companyModel.getEmail().getBytes());
            outputStream.write("@@".getBytes());
            outputStream.write(companyModel.getLinePhone().getBytes());
            outputStream.write("@@".getBytes());
            outputStream.write(companyModel.getVersion().getBytes());
            outputStream.write("@@".getBytes());
            outputStream.write(companyModel.getCompanyIntroduce().getBytes());

        } catch (FileNotFoundException e) {//FileNotFoundException 文件找不到
            e.printStackTrace();
        } catch (IOException e) {//io流有问题
            e.printStackTrace();
        }

    }

    /*
        一个完整的定义变量的方式
        权限修饰符  特征修饰符 变量类型  变量名=值；
      一个完整的方法定义：
        权限修饰符 特征修饰符 返回值类型 方法名称 （参数类型 参数名称。。。） 异常{
            方法体
            返回值
        }
        void 没有返回值
        {}只有大括号叫做方法块
        static {}静态代码块方法块
        类的加载顺序？
     */




    /**
     * 得到数据（IO流里面）
     * 封装数据到model
     *
     * @return
     */
    public CompanyDto getCompanyModel() {
        String companyString = WriteNote.getModelString(filePath);
        String[] companyModels = companyString.split("@@");
//        for (int i = 0; i < companyModels.length; i++) {
//            System.out.println(i + "---" + companyModels[i]);
//        }
//        CompanyModel companyModel = new CompanyModel();
//        companyModel
        CompanyDto companyDto = new CompanyDto();
//        companyDto.setAddress(companyModels[0]);
        companyDto.setPhone(companyModels[1]);
        companyDto.setLogo(companyModels[2]);
        companyDto.setAd(companyModels[3]);
        companyDto.setNet(companyModels[4]);
        companyDto.setEmail(companyModels[5]);
        companyDto.setLinePhone(companyModels[6]);
        companyDto.setVersion(companyModels[7]);
        companyDto.setCompanyIntroduce(companyModels[8]);

        return companyDto;
    }
}
